package com.gayworld.model.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.SessionFactory;

/**
 * Interfaz con los metodos comunes de los DAOs.
 * @author David
 *
 * @param <T>
 */
public interface BaseDAO<T> {

	/**
	 * Busca todos los objetos del tipo que le pasamos por parametro. 
	 * 
	 * @param type
	 *            clase tipo en donde iremos a BBDD.
	 * @return devuelve una coleccion de los tipos que hemos pasado por parametro.
	 */
	List<T> findAll(Class<T> type);

	/**
	 * Busca el obtejo con la clave que le pasamos por parametro
	 * 
	 * @param type
	 *            tipo de objeto en BBDD.
	 * @param id
	 *            valor de la clave primaria.
	 * @return devuelve el objeto que coincide con el tipo y clave que le pasamos por parametro.
	 */
	  T findById(Class<T> type, Serializable id);

	/**
	 * Guarda en base de datos el objeto deseado.
	 * 
	 * @param modelObject
	 *            objeto a guardar.
	 * @return 
	 */
	  Serializable save(T modelObject);

	/**
	 * Actualiza el objeto que le pasamos.
	 * 
	 * @param modelObject
	 *            objeto a actualizar
	 */
	  void update(T modelObject);

	/**
	 * Borra el objeto que le pasamos por parametro.
	 * 
	 * @param modelObject
	 *            objeto a borrar
	 */
	  void delete(T modelObject);
	  
	  
	SessionFactory getSession();
}